package com.bflow.commons.service;

import com.bflow.commons.bean.PageResult;
import com.bflow.commons.bean.QueryParam;
import com.bflow.commons.exception.BizException;
import com.bflow.commons.po.BasePo;

import java.io.Serializable;
import java.util.List;

/**
 * @Name XXX
 * @Author haowen
 * @Date 2018/12/12
 */
public interface IBaseService<P extends BasePo, B extends Serializable> {

    /**
     * 根据id查询
     * @param id
     * @return
     */
    B findById(Serializable id) throws BizException;

    /**
     * 根据ids查询
     * @param ids
     * @return
     */
    List<B> findByIds(List ids) throws BizException;

    /**
     * 根据ids查询
     * @param ids
     * @return
     */
    List<B> findByIds(Serializable... ids) throws BizException;

    /**
     * 根据id删除实体
     * @return 刪除记录数
     */
    int deleteById(Serializable id) throws BizException;

    /**
     * 根据id删除实体
     * @param ids
     * @return
     */
    int deleteByIds(Serializable... ids) throws BizException;

    /**
     * 根据paramBean条件进行删除
     *
     * @param paramBean
     * @return
     */
    int deleteBy(B paramBean) throws BizException;

    /**
     * 根据queryParam条件进行删除
     * @param queryParam
     * @return
     */
    int deleteBy(QueryParam queryParam) throws BizException;

    /**
     * 新增
     *
     * @param entity 实体
     * @return 保存数据的记录数
     */
    int insert(B entity) throws BizException;

    /**
     * 更新
     *
     * @param entity 实体
     * @return 更新数据的记录数
     */
    int update(B entity) throws BizException;

    /**
     * 批量新增
     * @param entities 实体集合
     */
    void batchInsert(List<B> entities) throws BizException;

    /**
     * 批量更新
     * @param entities 实体集合
     */
    void batchUpdate(List<B> entities) throws BizException;

    /**
     * 根据param条件查询数据
     * @param param
     * @return
     */
    List<B> findByParam(QueryParam param) throws BizException;

    B getOneBy(B b);

    List<B> getListBy(B b);

    /**
     * 根据条件查询唯一数据记录
     *
     * @param param
     * @return
     */
    B findUniqueByParam(QueryParam param) throws BizException;

    List<B> findAll() throws BizException;

    /**
     * 根据 最大id
     * @return
     */
    Object getMaxId() throws BizException;

    /**
     * 根据BaseQuery条件查询分页数据
     * @param queryParam 查询条件
     * @return
     */
    PageResult<B> findPage(QueryParam queryParam) throws BizException;

    Class<P> getPoClazz() throws BizException;

    Class<B> getBoClazz() throws BizException;
}
